package doujian;

import doujian.filter.Filter;
import doujian.match.Match;
import doujian.match.MatchModel;
import doujian.util.JsonParser;
import doujian.util.Log;
import doujian.model.Host;
import doujian.model.Student;

import java.util.List;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

/**
 * 匹配模块 Api在此暴露 Created by Administrator on 2017/4/16.
 */
public class MatchManager {

	/**
	 * 传入特定的学生，获取筛选的后的房东列表
	 *
	 * @param stuStr
	 * @param hostList
	 * @return
	 */
//	hostList 参考数据类型
//	[
//	    {
//	        "id": 101,
//	        "lat": 0,
//	        "lng": 0,
//	        "rooms": [
//	            {
//	                "max_person": 1
//	            },
//	            {
//	                "max_person": 2
//	            }
//	        ],
//	        "adults": [
//	            {
//	                "sex": 0
//	            },
//	            {
//	                "sex": 1
//	            }
//	        ]
//	    },
//	    {
//	        "id": 102,
//	        "lat": 0,
//	        "lng": 0,
//	        "rooms": [
//	            {
//	                "max_person": 2
//	            }
//	        ],
//	        "adults": [
//	            {
//	                "sex": 0
//	            }
//	        ]
//	    }
//	]
	public static String getFilteredHostList(String stuStr, String hostList) {
		Gson gson = new Gson();
		List<Host> list = gson.fromJson(hostList, new TypeToken<List<Host>>() {
		}.getType());
		Student stu = gson.fromJson(stuStr, Student.class);
		List<Integer> result = Filter.getHostList(stu, list);
		return gson.toJson(result);
	}

	/**
	 * 传入特定的房东，获取筛选的后的学生列表
	 *
	 * @param stuList
	 * @param hostStr
	 * @return
	 */
//	stuList 参考数据类型
//	[
//	    {
//	        "id": 202,
//	        "sex": 0,
//	        "numberOfPeople": 2,
//	        "lat": 0,
//	        "lng": 0
//	    },
//	    {
//	        "id": 203,
//	        "sex": 0,
//	        "numberOfPeople": 4,
//	        "lat": 0,
//	        "lng": 0
//	    },
//	    {
//	        "id": 204,
//	        "sex": 1,
//	        "numberOfPeople": 1,
//	        "lat": 0,
//	        "lng": 0
//	    }
//	]
	public static String getFilteredStudentList(String stuList, String hostStr) {
		Gson gson = new Gson();
		List<Student> list = gson.fromJson(stuList, new TypeToken<List<Student>>() {
		}.getType());
		Host host = gson.fromJson(hostStr, Host.class);
		List<Integer> result = Filter.getStuList(host, list);
		return gson.toJson(result);
	}

	/**
	 * 传入学生和房东的列表，获得最优匹配的结果
	 *
	 * @param stuList
	 * @param hostList
	 * @return
	 */
//	stuList
//	[
//	  {
//	    "id": 1,
//	    "selections": [ 4, 5]
//	  },
//	  {
//	    "id": 2,
//	    "selections": [ 5 ]
//	  },
//	  {
//	    "id": 3,
//	    "selections": [ 4, 5 ]
//	  }
//	]
	
//	hostList
//	[
//	  {
//	    "id": 4,
//	    "selections": [ 1 ]
//	  },
//	  {
//	    "id": 5,
//	    "selections": [ 1, 2 ]
//	  }
//	]
	public static String getMatch(String stuList, String hostList) {
		try {
			String graph = Match.removeOneWayEdge(stuList, hostList);
			return Match.allocate(graph);
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}
}
